#pragma once
#include <string>
#include <cstddef> // std::size_t

/*
 在 C++ 中，要使用 ODB 将类声明为持久化类，需要包含 ODB 的核心头文
件，并使用 #pragma db object 指令
 #pragma db object 指示 ODB 编译器将 person 类视为一个持久化类。
*/
#include <odb/core.hxx>
#include <odb/nullable.hxx>
#include <boost/date_time/posix_time/posix_time.hpp>

namespace bite_im
{
#pragma db object table("relation")     // 用户关系表映射结构
    class Relation
    {
    public:
        Relation() {}

        Relation(const std::string &user_id,
                 const std::string &peer_id)
            : _user_id(user_id),
              _peer_id(peer_id) {}

        void user_id(const std::string &val) { _user_id = val; }
        std::string user_id() const { return _user_id; }

        void peer_id(const std::string &val) { _peer_id = val; }
        std::string peer_id() const { return _peer_id; }

    private:
        friend class odb::access;
        //_id 成员前面的 pragma 告诉 ODB 编译器，以下成员是对象的标识符。auto 说明符指示它是数据库分配的 ID。
#pragma db id auto // 表示 ID 字段将自动生成（通常是数据库中的主键），在哪个上面就是主键
        unsigned long _id;

#pragma db type("varchar(64)") index
        std::string _user_id; // 当前用户id
#pragma db type("varchar(64)")
        std::string _peer_id; // 好友（对方）id
    };
}

// odb -d mysql --std c++11 --generate-query --generate-schema --profile boost/date-time message.hxx
//  生成数据库后记得进入message_sql来给ChatRoom生成表